package com.noexcs.forum.entity;

import lombok.Data;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;

/**
 * @author noexcs
 * @since 5/21/2022 11:49 AM
 */
@Data
public class Page {

    /**
     * 第几页
     */
    @Min(1)
    private int current = 1;

    /**
     * 一页最多能含有多少条目
     */
    @Min(1)
    @Max(100)
    private int limit = 10;

    /**
     * 所有页一共有多少条目
     */
    @Min(0)
    private int rows;

    /**
     * 查询路径（用于复用分页连接）
     */
    private String path;

    /**
     * @return 这一页的第一条在所有数据中的位置
     */
    public int getOffset() {
        return (current - 1) * limit;
    }

    /**
     * @return 一共有多少页
     */
    public int getTotal() {
        if (rows % limit == 0) {
            return rows / limit;
        } else {
            return rows / limit + 1;
        }
    }

    /**
     * @return 起始页码
     */
    public int getFrom() {
        int from = current - 2;
        return Math.max(from, 1);
    }

    /**
     * @return 获取结束页码
     */
    public int getTo() {
        return Math.min(getTotal(), current + 2);
    }
}
